Excel em Java
Recentemente precisei fazer a leitura de arquivos excel para um sistema que estou desenvolvendo e tive dificuldades para achar um exemplo que mostrasse claramente como fazer a leitura do mesmo.
Assim resolvi mostrar a forma como fiz e que resolveu meu problema, lembrando que cada um tem uma forma de fazer.
1 – O primeiro passo é adicionar a biblioteca no projeto.
Neste tutorial utilizei a versão 2.6.12 da biblioteca.
Usuário Maven.
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version>
</dependency>
pom.xml
Ou download diretamente em: https://sourceforge.net/projects/jexcelapi/files/jexcelapi/2.6.12/
2 – Ler arquivo Excel utilizando a biblioteca.
Criar o Workbook do arquivo excel.
File file = new File("/home/allan-braga/Desktop/alunos.xls");
FileInputStream fileInputStream = new FileInputStream(file);
//Usei o enconding Cp1252 para corrigir meus problemas de encoding
WorkbookSettings ws = new WorkbookSettings();
ws.setEncoding("Cp1252");
//Para não mostrar avisos no console
ws.setSuppressWarnings(true);
Workbook workbook = Workbook.getWorkbook(fileInputStream,ws);
//Índíce do arquivo se acaso tiver mais de um
Sheet sheet = workbook.getSheet(0);
//Títulos do arquivo
Cell[] titles = sheet.getRow(0);
Da forma como implementei é feito a leitura de acordo os títulos das colunas então o primeiro passo e mapear as colunas que deseja ler, independete da ordem que ela esteja dentro do arquivo.
HashMap<String,String> titleColumnsRead = new HashMap<String,String> ();
titleColumnsRead.put("nome", "");
titleColumnsRead.put("sobrenome", "");
titleColumnsRead.put("endereco", "");
titleColumnsRead.put("cep", "");
Colunas a serem lidas
Utilizei um HashMap para facilitar a verificação do título da coluna usando o método containsKey como mostrado abaixo:
3 – Percorrer linhas e colunas e atribuir ao objeto aluno.
ArrayList<Aluno> alunos = new ArrayList<>();
//Linhas
for (int i = 1; i < sheet.getRows(); i++) {
Aluno aluno = new Aluno();
//Colunas
for (int j = 0; j < sheet.getColumns(); j++) {
//Conteúdo da celula que está sendo lida
Cell celulaJ = sheet.getCell(j, i);
//Verifica se a coluna que está sendo lida é alguma coluna do hashmap
if(titleColumnsRead.containsKey(titles[j].getContents())){
//Verifica qual é a coluna e atribui no objeto
switch (titles[j].getContents()) {
case "nome":
aluno,setNome(celulaJ.getContents());
break;
case "sobrenome":
aluno,setSobrenome(celulaJ.getContents());
break;
case "endereco":
aluno,setEndereco(celulaJ.getContents());
break;
case "cep":
aluno,setCep(celulaJ.getContents());
break;
}
}
}
alunos.add(aluno);
}
Percorre linhas e colunas
Essa é a forma que utilizei para resolver meus problema, dúvidas e sugestões são bem vindas.